import com.example.dao.GoodsDao;
import com.example.model.Goods;
import org.junit.Before;
import org.junit.Test;
import java.sql.SQLException;
import java.util.List;
import static org.junit.Assert.*;

public class GoodsDaoTest1 {
    private GoodsDao goodsDao;
    @Before
    public void setUp() {
        goodsDao = new GoodsDao();
    }
    /**
     * 测试获取所有商品数量（typeID=0）
     * 预期：返回总商品数量165
     */
    @Test
    public void testGetCountOfGoodsByTypeID_AllTypes() throws SQLException {
        int result = goodsDao.getCountOfGoodsByTypeID(0);
        assertEquals("所有商品数量应为165", 15, result);
        //若与预期不符，则输出SQL异常信息，下面代码不会执行
        System.out.println("测试通过");
    }
    /**
     * 测试获取指定类型商品数量（有效typeID=1）
     * 预期：返回类型1的商品数量23
     */
    @Test
    public void testGetCountOfGoodsByTypeID_ValidType() throws SQLException {
        int result = goodsDao.getCountOfGoodsByTypeID(1);
        assertEquals("类型1的商品数量应为23", 23, result);
        //若与预期不符，则输出SQL异常信息，下面代码不会执行
        System.out.println("测试通过");
    }

    /**
     * 测试获取不存在类型的商品数量（无效typeID=999）
     * 预期：返回数量0
     */
    @Test
    public void testGetCountOfGoodsByTypeID_InvalidType() throws SQLException {
        int result = goodsDao.getCountOfGoodsByTypeID(999);
        assertEquals("无效类型应返回0", 0, result);
        //若与预期不符，则输出SQL异常信息，下面代码不会执行
        System.out.println("测试通过");
    }

    /**
     * 测试分页查询所有商品（typeID=0）
     * 验证：返回指定页数据，数量等于pageSize
     */
    @Test
    public void testSelectGoodsByTypeID_AllTypes() throws SQLException {
        List<Goods> goodsList = goodsDao.selectGoodsByTypeID(0, 1, 3);
        assertEquals("第一页应返回3条记录", 3, goodsList.size());
    }

    /**
     * 测试分页查询指定类型商品（typeID=1）
     * 验证：返回对应类型的商品数据
     */
    @Test
    public void testSelectGoodsByTypeID_SpecificType() throws SQLException {
        List<Goods> goodsList = goodsDao.selectGoodsByTypeID(1, 1, 2);
        assertFalse("结果集不应为空", goodsList.isEmpty());
        assertEquals("类型ID应匹配", 1, goodsList.get(0).getType().getId());
    }

    /**
     * 测试通过ID获取商品详情（有效ID）
     * 验证：返回正确的商品对象
     */
    @Test
    public void testGetGoodsById_ValidId() throws SQLException {
        Goods goods = goodsDao.getGoodsById(1);
        assertNotNull("商品对象不应为空", goods);
        assertEquals("商品ID应匹配", 1, goods.getId());
    }

    /**
     * 测试推荐商品判断逻辑（轮播图推荐）
     * 验证：正确识别推荐状态
     */
    @Test
    public void testIsScrollRecommendation() throws SQLException {
        Goods goods = new Goods();
        goods.setId(1);
        assertTrue("应被识别为轮播推荐", goodsDao.isScroll(goods));
    }

    /**
     * 测试添加推荐操作
     * 验证：推荐表中新增记录
     */
    @Test
    public void testAddRecommendation() throws SQLException {
        int testGoodsId = 2;
        int recommendType = 1;
        goodsDao.addRecommend(testGoodsId, recommendType);
        System.out.println("测试通过");
    }
}